#include <iostream>
using namespace std;
class array_t {
  private:
    const int m_len; // 数组长度
    int      *m_arr; // 数组指针
    int      *m_p;   // 指向数组第i个元素的指针
  public:
    // 构造函数和析构函数
    array_t(int len); // 构造函数
    ~array_t();       // 析构函数
    // 成员函数
    void input(); // 从控制台输入数组元素
    void show();  // 显示数组元素
  private:
    int *at(int i); // 获取第i个元素的指针
};
// 构造函数
array_t::array_t(int len) : m_len(len)
{
    // 使用初始化列表来给 m_len 赋值
    if (len > 0)
    {
        m_arr = new int[len]; /*分配内存*/
    }
    else
    {
        m_arr = nullptr;
    }
}
// 析构函数
array_t::~array_t()
{
    cout << "~array_t delete[] m_arr[" << m_len << "]" << endl;
    delete[] m_arr; // 释放内存
}

void array_t::input()
{
    // m_p 中存放 at(i) 返回的地址，当为null的时候退出
    for (int i = 0; m_p = at(i), m_p != nullptr; i++)
    {
        *at(i) = i + 1; // 改为自动生成数据
    }
}

void array_t::show()
{
    // m_p 中存放 at(i) 返回的地址，当为null的时候退出
    for (int i = 0; m_p = at(i), m_p != nullptr; i++)
    {

        if (i == m_len - 1)
        {
            cout << *at(i) << endl;
        }
        else
        {
            cout << *at(i) << ", ";
        }
    }
}

int *array_t::at(int i)
{
    if (!m_arr || i < 0 || i >= m_len)
    {
        return nullptr;
    }
    else
    {
        return m_arr + i;
    }
}

void func(void)
{
    array_t array(3);
    array.input();
    array.show();
    return;
}
int main()
{
    // 局部负向
    array_t arr(10);
    arr.input();
    arr.show();
    
    // new创建的对象
    array_t *parr = new array_t(5); // 创建一个有5个元素的数组（对象）
    parr->input();
    parr->show();
    delete parr; // 删除数组（对象）
    // 函数中创建的对象
    func();
    return 0;
}